package inner;

/**
 * @User: vitobo
 * @Date: 2024-05-20
 * @Description:
 */

class OutClass2{
    public int data1 = 1;
    int data2 = 2;
    public static int data3 = 3;

    public void test(){
        System.out.println("OutClass::test()");
    }

    /**
     * 静态内部类
     * 1. 如何获取静态内部类对象？
     *      OutClass2.InnerClass2 innerClass2 = new OutClass2.InnerClass2();
     * 2. 静态内部类当中不能访问外部类的非静态成员。外部类的非静态成员，需要通过外部类的对象的引用才能访问
     *      非要访问：outClass2.data1
     *
     */

    static class InnerClass2{
        public int data4 = 4;
        int data5 = 5;
        public static int data6 = 6;

        public void func(){
            System.out.println("Inner::func()");

            OutClass2 outClass2 = new OutClass2();

            System.out.println(outClass2.data1);
            System.out.println(outClass2.data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
        }
    }
}

class Person{
    public int age = 25;
    public String name = "yuan";

//    public void show(){
//        System.out.println("姓名：" + name + "年龄： =" + age);
//    }


    // @Override 注解
    @Override
    public String toString() {
//        return "Person{" +
//                "age=" + age +
//                ", name='" + name + '\'' +
//                '}';

        return "姓名：" + name + " 年龄： =" + age;
    }
}

public class Test2 {


    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person);
    }


    public void func(){
        // 局部内部类：定义在方法体内部
        // 不能被public，static等访问限定符修饰
        class Inner{
            public void test(){
                System.out.println("******************");
            }
        }
        // 只能在该方法体内部使用
        Inner inner = new Inner();
        inner.test();
    }
    public static void main1(String[] args) {
        Person person = new Person();
        System.out.println(person.age);
        System.out.println(person.name);

        // 匿名对象 new Person() 只能使用一次，每次使用的时候必须重新new
        System.out.println(new Person().age);

        // 匿名内部类
        new Person(){};

    }
}
